﻿Public Class registrarPresupuesto

    Private Sub registrarPresupuesto_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        LimpiaCliente()
        LimpiaArticulo()
        LimpiarLista()
    End Sub
    Private Sub LimpiaCliente()
        txtCodClie.Text = ""
        txtDni.Text = ""
        txtNomClie.Text = ""
        txtApeClie.Text = ""
        txtTipoClie.Text = ""

        txtCodClie.Enabled = True
        txtDni.Enabled = True
        txtNomClie.Enabled = True
        txtApeClie.Enabled = True
        txtTipoClie.Enabled = True

    End Sub
    Public Sub LimpiaArticulo()
        'txtCodArticulo.Text = ""
        numCantidad.Value = 1
        lblDescAticulo.Text = ""
        lblDescAticulo.Visible = False
        btnAgregarACarrito.Enabled = False
    End Sub
    Private Sub LimpiarLista()
        lvArticulos.Items.Clear()
        lvArticulos.Columns.Clear()
        lvArticulos.Columns.Add("Cod. Articulo", 100) '0
        lvArticulos.Columns.Add("Nombre", 200) '1
        lvArticulos.Columns.Add("Cantidad", 50) '2
        lvArticulos.Columns.Add("Importe", 100) '3
        txtTotal.Text = "0"
    End Sub
    Private Sub AsignaCampos(ByVal Producto As clsCatalogo)
        txtCodArticulo.Text = Convert.ToString(Producto.Prod_Id).Trim
        lblDescAticulo.Text = Producto.Descripcion.Trim.ToUpper
        lblDescAticulo.Visible = True
        btnAgregarACarrito.Enabled = True
        numCantidad.Focus()
    End Sub
    Private Sub TraeConsulta(ByVal ListaProductos As List(Of clsCatalogo))
        consultaCatalogo.ModoAcceso = "PRESUPUESTO"
        consultaCatalogo.grdCatalogo.DataSource = ListaProductos

        consultaCatalogo.grdCatalogo.Columns(0).DataPropertyName = "Prod_Id"
        consultaCatalogo.grdCatalogo.Columns(1).DataPropertyName = "Descripcion"
        consultaCatalogo.grdCatalogo.Columns(2).DataPropertyName = "Marca"
        consultaCatalogo.grdCatalogo.Columns(3).DataPropertyName = "Modelo"
        consultaCatalogo.grdCatalogo.Columns(4).DataPropertyName = "Tipo"
        consultaCatalogo.grdCatalogo.Columns(5).DataPropertyName = "Costo"
        consultaCatalogo.grdCatalogo.Columns(6).DataPropertyName = "Cantidad"
        consultaCatalogo.grdCatalogo.Columns(7).DataPropertyName = "Proveedor"
        consultaCatalogo.grdCatalogo.Columns(8).DataPropertyName = "Fecha_Ingreso"
        consultaCatalogo.grdCatalogo.Columns(9).DataPropertyName = "Cod_Suc"

        consultaCatalogo.grdCatalogo.Columns(0).HeaderText = "Codigo"
        consultaCatalogo.grdCatalogo.Columns(1).HeaderText = "Descripcion"
        consultaCatalogo.grdCatalogo.Columns(2).HeaderText = "Marca"
        consultaCatalogo.grdCatalogo.Columns(3).HeaderText = "Modelo"
        consultaCatalogo.grdCatalogo.Columns(4).HeaderText = "Tipo"
        consultaCatalogo.grdCatalogo.Columns(5).HeaderText = "Costo"
        consultaCatalogo.grdCatalogo.Columns(6).HeaderText = "Stock"
        consultaCatalogo.grdCatalogo.Columns(7).HeaderText = "Proveedor"
        consultaCatalogo.grdCatalogo.Columns(8).HeaderText = "Fecha Alta"
        consultaCatalogo.grdCatalogo.Columns(9).HeaderText = "Sucursal"

        consultaCatalogo.grdCatalogo.Columns(9).Visible = False

        consultaCatalogo.MdiParent = Me.MdiParent
        Me.Enabled = False
        consultaCatalogo.Show()
    End Sub
    Private Sub AsignaCampos(ByVal Cliente As clsCliente)
        txtCodClie.Text = Cliente.Cli_Id.ToString.Trim
        txtDni.Text = Cliente.Dni.Trim.ToUpper
        txtNomClie.Text = Cliente.Nombre.Trim.ToUpper
        txtApeClie.Text = Cliente.Apellido.Trim.ToUpper
        If Cliente.Tipo = "P" Then
            txtTipoClie.Text = "PARTICULAR"
        Else
            txtTipoClie.Text = "EMPRESA"
        End If

        txtCodClie.Enabled = False
        txtDni.Enabled = False
        txtNomClie.Enabled = False
        txtApeClie.Enabled = False
        txtTipoClie.Enabled = False
    End Sub
    Private Sub TraeConsulta(ByVal ListaClientes As List(Of clsCliente))
        consultaCliente.ModoAcceso = "PRESUPUESTO"
        consultaCliente.grdClientes.DataSource = ListaClientes

        consultaCliente.grdClientes.Columns(0).DataPropertyName = "Cli_Id"
        consultaCliente.grdClientes.Columns(1).DataPropertyName = "Apellido"
        consultaCliente.grdClientes.Columns(2).DataPropertyName = "Nombre"
        consultaCliente.grdClientes.Columns(3).DataPropertyName = "Dni"
        consultaCliente.grdClientes.Columns(4).DataPropertyName = "Email"
        consultaCliente.grdClientes.Columns(5).DataPropertyName = "Cuit"
        consultaCliente.grdClientes.Columns(6).DataPropertyName = "Direccion"
        consultaCliente.grdClientes.Columns(7).DataPropertyName = "Altura"
        consultaCliente.grdClientes.Columns(8).DataPropertyName = "Depto"
        consultaCliente.grdClientes.Columns(9).DataPropertyName = "Tel"

        consultaCliente.grdClientes.Columns(10).DataPropertyName = "Tipo"
        consultaCliente.grdClientes.Columns(11).DataPropertyName = "Cod_suc"

        consultaCliente.grdClientes.Columns(0).HeaderText = "Codigo"
        consultaCliente.grdClientes.Columns(1).HeaderText = "Apellido"
        consultaCliente.grdClientes.Columns(2).HeaderText = "Nombre"
        consultaCliente.grdClientes.Columns(3).HeaderText = "DNI"
        consultaCliente.grdClientes.Columns(4).HeaderText = "Email"
        consultaCliente.grdClientes.Columns(5).HeaderText = "CUIT/CUIL"
        consultaCliente.grdClientes.Columns(6).HeaderText = "Direccion"
        consultaCliente.grdClientes.Columns(7).HeaderText = "Nro."
        consultaCliente.grdClientes.Columns(8).HeaderText = "Depto."
        consultaCliente.grdClientes.Columns(9).HeaderText = "Telefono"

        consultaCliente.grdClientes.Columns(10).HeaderText = "Tipo"
        consultaCliente.grdClientes.Columns(11).HeaderText = "Codigo Sucursal"

        consultaCliente.grdClientes.Columns(10).Visible = False
        consultaCliente.grdClientes.Columns(11).Visible = False

        consultaCliente.MdiParent = Me.MdiParent
        Me.Enabled = False
        consultaCliente.Show()
    End Sub

    Private Sub btnBuscaCliente_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBuscaCliente.Click
        LimpiaCliente()
    End Sub

    Private Sub btnLimpia_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLimpia.Click
        Dim Cliente As New clsCliente()
        Dim ClienteDao As New daoCliente()
        If txtCodClie.Text.Trim.Length > 0 Then 'Si ingreso un codigo de cliente busco por ese codigo
            Cliente = ClienteDao.TraeCliente(Convert.ToInt32(txtCodClie.Text.Trim))
            If Cliente.Cli_Id > 0 Then
                AsignaCampos(Cliente)
            Else
                MessageBox.Show("No se encontró ningun cliente con codigo: " & txtCodClie.Text.Trim, "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End If
        Else ''SI no hay codigo de articulo busco por DNI,  Nombre, Apellido o 
            If txtDni.Text.Trim.Length > 0 Then
                Cliente = ClienteDao.TraeClienteDNI(txtDni.Text.Trim.ToUpper)
                If Cliente.Cli_Id > 0 Then
                    AsignaCampos(Cliente)
                Else
                    MessageBox.Show("No se encontró ningun cliente con DNI: " & txtDni.Text.Trim.ToUpper, "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information)
                End If
            Else
                Dim ListaClientes As New List(Of clsCliente)
                If txtApeClie.Text.Trim.Length > 0 Then ''Si puso apellido busco por apellido
                    ListaClientes = ClienteDao.TraeClientesApellido(txtApeClie.Text.Trim.ToUpper)
                Else
                    If txtNomClie.Text.Trim.Length > 0 Then ''Si puso nombre busco por nombre
                        ListaClientes = ClienteDao.TraeClientesNombre(txtNomClie.Text.Trim.ToUpper)
                    Else ''Si puso nada traigo todos los clientes
                        ListaClientes = ClienteDao.TraeClientes()
                    End If
                End If
                If ListaClientes.Count > 1 Then ''Encontro mas de un articulo
                    TraeConsulta(ListaClientes)
                ElseIf ListaClientes.Count = 1 Then '' Encontro un solo articulo
                    Cliente = ListaClientes.Item(0)
                    AsignaCampos(Cliente)
                Else ''No encontro ningun articulo
                    MessageBox.Show("No se encontró ningun Cliente ", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information)
                End If

            End If

        End If
        Cliente.Dispose()
        ClienteDao.Dispose()
    End Sub

    Private Sub btnBuscarArticulo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBuscarArticulo.Click
        Dim Producto As New clsCatalogo()
        Dim ProductoDao As New daoCatalogo()
        Dim ListaProductos As New List(Of clsCatalogo)

        ''Veo si agrego un codigo numerico o si es carater
        If txtCodArticulo.Text.Trim.Length > 0 Then 'Si ingreso un codigo de articulo busco por ese codigo
            Dim Codigo As Int32
            Dim Nombre As String
            If IsNumeric(txtCodArticulo.Text.Trim) Then
                Codigo = Convert.ToInt32(txtCodArticulo.Text.Trim)
                If Codigo > 0 Then
                    Producto = ProductoDao.TraeArticulo(Codigo)
                End If
            End If

            If Producto.Prod_Id > 0 Then
                AsignaCampos(Producto)
            Else
                Nombre = txtCodArticulo.Text.Trim.ToUpper
                ListaProductos = ProductoDao.TraeArticulos(Nombre)
                If ListaProductos.Count > 1 Then ''Encontro mas de un articulo
                    TraeConsulta(ListaProductos)
                ElseIf ListaProductos.Count = 1 Then '' Encontro un solo articulo
                    Producto = ListaProductos.Item(0)
                    AsignaCampos(Producto)
                Else ''No encontro ningun articulo
                    MessageBox.Show("No se encontró ningun producto ", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information)
                End If
            End If
        Else ''SI no ingreso nada traigo todos los articulos
            ListaProductos = ProductoDao.TraeArticulos()
            If ListaProductos.Count > 1 Then ''Encontro mas de un articulo
                TraeConsulta(ListaProductos)
            ElseIf ListaProductos.Count = 1 Then '' Encontro un solo articulo
                Producto = ListaProductos.Item(0)
                AsignaCampos(Producto)
            Else ''No encontro ningun articulo
                MessageBox.Show("No se encontró ningun producto ", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End If
        End If
        Producto.Dispose()
        ProductoDao.Dispose()
    End Sub

    Private Sub btnAgregarACarrito_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAgregarACarrito.Click
        Dim Producto As New clsCatalogo()
        Dim ProductoBusiness As New businessCatalogo()
        Dim ProductoDao As New daoCatalogo()
        Dim Cantidad As Int32

        Try
            Producto = ProductoDao.TraeArticulo(Convert.ToInt32(txtCodArticulo.Text.Trim))
            Cantidad = Convert.ToInt32(numCantidad.Value)
            If Cantidad > 0 Then
                ''Verifico si la lista ya tiene el articulo
                ''si no lo tiene lo agrego, si ya lo tien le cambio la cantidad
                Dim ItemsEnLista As Int32
                Dim Total As Decimal
                Dim i As Int32
                Total = Convert.ToDecimal(txtTotal.Text.Trim)
                ItemsEnLista = lvArticulos.Items.Count()
                Dim flag_actualizo As Boolean = False

                If ItemsEnLista > 0 Then
                    'Recorro la lista existente
                    For i = 0 To ItemsEnLista - 1
                        ''Si encuentro el producto actualizo la cantidad y el importe
                        If Convert.ToInt32(lvArticulos.Items(i).Text.Trim) = Producto.Prod_Id Then
                            ''Calculo el nuevo total
                            Total = Total - (Producto.Costo * Convert.ToInt32(lvArticulos.Items(i).SubItems(2).Text.Trim) * Configuracion.Ganancia)
                            Total = Total + Producto.Costo * Configuracion.Ganancia * Cantidad

                            ''Actualizo la grilla
                            lvArticulos.Items(i).SubItems(2).Text = Cantidad.ToString.Trim

                            ''marco el flag de actualizacion
                            flag_actualizo = True
                        End If
                    Next
                End If

                If flag_actualizo = False Then
                    ''Agrego el nuevo registro
                    lvArticulos.Items.Add(Producto.Prod_Id.ToString.Trim)
                    lvArticulos.Items(i).SubItems.Add(Producto.Descripcion.Trim.ToUpper)
                    lvArticulos.Items(i).SubItems.Add(Cantidad.ToString.Trim)
                    lvArticulos.Items(i).SubItems.Add("$" & Convert.ToString(Producto.Costo * Configuracion.Ganancia))
                    ''Actualizo el Total de la compra
                    Total = Total + Producto.Costo * Configuracion.Ganancia * Cantidad
                End If
                txtTotal.Text = Total.ToString.Trim
                txtCodArticulo.Text = ""
                LimpiaArticulo()
            Else
                MessageBox.Show("Debe Ingresar Cantidad de unidades Mayor a Cero", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End If
        Catch ex As Exception
            MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
        Finally
            Producto.Dispose()
            ProductoBusiness.Dispose()
            ProductoDao.Dispose()
        End Try
    End Sub

    Private Sub btnQuitarDeCarrito_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnQuitarDeCarrito.Click
        If lvArticulos.Items.Count = 0 Then
            MessageBox.Show("No hay registros cargados.", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information)
            Exit Sub
        End If
        If lvArticulos.SelectedItems.Count = 1 Then
            Dim Total As Decimal
            Dim Producto As New clsCatalogo()
            Dim ProductoDao As New daoCatalogo()
            Total = Convert.ToDecimal(txtTotal.Text.Trim)

            Producto = ProductoDao.TraeArticulo(Convert.ToInt32(lvArticulos.SelectedItems(0).Text.Trim))

            Total = Total - (Producto.Costo * Convert.ToInt32(lvArticulos.SelectedItems(0).SubItems(2).Text.Trim) * Configuracion.Ganancia)

            txtTotal.Text = Total.ToString.Trim
            lvArticulos.Items.Remove(lvArticulos.SelectedItems(0))
        Else
            MessageBox.Show("Seleccione un Artículo para eliminar", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information)
        End If
        If lvArticulos.Items.Count = 0 Then
            LimpiarLista()
        End If
    End Sub

    Private Sub btnLimpiar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLimpiar.Click
        If lvArticulos.Items.Count = 0 Then
            MessageBox.Show("No hay registros cargados.", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information)
            Exit Sub
        End If
        LimpiarLista()
    End Sub

    Private Sub btnCancelar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancelar.Click
        Salir()
    End Sub

    Private Sub btnComprar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnComprar.Click
        Dim Total As Decimal
        Dim Cliente As New clsCliente()
        Dim ClienteDao As New daoCliente()
        Dim Presupuesto As New clsPresupuesto()
        Dim PresupuestoDao As New daoPresupuesto()
        Dim Presupuesto_DetDao As New daoPresupuesto_Detalle()
        Dim ProductoDao As New daoCatalogo()
        Dim ProductoBusiness As New businessCatalogo()
        Dim i As Int32
        Dim CantItems As Int32

        Try
            'validaciones
            ''Verifico que tenga al menos un item
            If lvArticulos.Items.Count = 0 Then
                MessageBox.Show("No hay registros cargados.", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information)
                Exit Sub
            End If

            If txtCodClie.Text.Trim.Length > 0 Then
                Cliente = ClienteDao.TraeCliente(Convert.ToInt32(txtCodClie.Text.Trim))
            End If

            Total = Convert.ToDecimal(txtTotal.Text.Trim)

            'If Total > 1000 And Cliente.Cli_Id = 0 Then
            '    MessageBox.Show("La venta supera los $1000 Debe ingresar un Cliente para continuar.", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information)
            '    Exit Sub
            'End If

            ''Doy de alta el presupuesto(cabecera)
            Presupuesto.Presu_Id = Numerador.TraeProximo("PRESUPUESTO")
            Presupuesto.Presu_Fecha = Now.Date()
            Presupuesto.Cli_Id = Cliente.Cli_Id
            Presupuesto.Emp_id = Usuario.Emp_Id
            Presupuesto.Presu_Importe = Total
            Presupuesto.Cod_Suc = Configuracion.Cod_Suc
            PresupuestoDao.Alta(Presupuesto)

            ''Recorro la grilla y doy de alta el presupuesto(detalle)
            CantItems = lvArticulos.Items.Count
            For i = 0 To CantItems - 1
                Dim Presu_Det As New clsPresupuesto_Detalle()
                Dim Producto As New clsCatalogo()
                Producto = ProductoDao.TraeArticulo(Convert.ToInt32(lvArticulos.Items(i).Text.Trim))
                Presu_Det.Prsdte_Id = Numerador.TraeProximo("PRESUPUESTO_DETALLE")
                Presu_Det.Presu_Id = Presupuesto.Presu_Id
                Presu_Det.Prod_Id = Convert.ToInt32(Producto.Prod_Id)
                Presu_Det.Prsdte_Cantidad = Convert.ToInt32(Convert.ToInt32(lvArticulos.Items(i).SubItems(2).Text.Trim.ToUpper))
                Presu_Det.Cod_Suc = Configuracion.Cod_Suc
                ''Alata del datalle
                Presupuesto_DetDao.Alta(Presu_Det)
                ''Descuento del Stock
                Presu_Det.Dispose()
                Producto.Dispose()
            Next

            MessageBox.Show("El presupuesto se ha guardado correctamente con el Codigo: " & _
                            Presupuesto.Presu_Id.ToString.Trim, "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information)

            'mejorar sistema impresion
            'PrintForm1.Form = Me
            'PrintForm1.PrintAction = Printing.PrintAction.PrintToPreview
            'PrintForm1.Print()

            LimpiaCliente()
            LimpiaArticulo()
            LimpiarLista()
        Catch ex As Exception
            MessageBox.Show(ex.Message, "Error.", MessageBoxButtons.OK, MessageBoxIcon.Error)
        Finally
            Cliente.Dispose()
            ClienteDao.Dispose()
            Presupuesto.Dispose()
            PresupuestoDao.Dispose()
            Presupuesto_DetDao.Dispose()
            ProductoDao.Dispose()
            ProductoBusiness.Dispose()
        End Try

    End Sub
    Private Sub Salir()
        If lvArticulos.Items.Count() > 0 Then
            Dim Respuesta As DialogResult
            Respuesta = MessageBox.Show("¿Desea salir sin guardar?", "Aviso", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1)
            If Respuesta = Windows.Forms.DialogResult.Yes Then
                Me.Close()
            Else
                Exit Sub
            End If
        Else
            Me.Close()
        End If
    End Sub

    Private Sub registrarPresupuesto_Deactivate(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Deactivate
    End Sub

    Private Sub txtCodClie_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtCodClie.KeyPress
        validarInt(e)
    End Sub

    Private Sub txtDni_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtDni.KeyPress
        validarInt(e)
    End Sub

    Private Sub txtNomClie_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtNomClie.KeyPress
        validarString(e)
    End Sub

    Private Sub txtApeClie_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtApeClie.KeyPress
        validarString(e)
    End Sub

    Private Sub txtCodArticulo_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtCodArticulo.KeyPress
        validarInt(e)
    End Sub

End Class